iT邦幫忙

2023 iThome 鐵人賽

DAY 9
0
Cloud Native

.NET雲端魔法尊者之路系列 第 9

2023-鐵人賽.NET雲端魔法尊者之路 Day9 C#篇 C# 物件導向程式實例

  • 分享至 

  • xImage
  •  

哈囉 ~ 在前一篇文章中,我們討論了物件導向的基本概念,現在就讓我們使用C#語言來實現物件導向編程的概念吧。

類別與物件

它描述了物件將具有的屬性和方法。

// 類別
public class Car
{
    // 屬性
    public string Make;
    public int Year;

    // 方法
    public void Start()
    {
        Console.WriteLine("創建於"+Year+"年的"+Make+"汽車已啟動!");
    }

    public void Stop()
    {
        Console.WriteLine("汽車已停止!");
    }
}

設定屬性與調用方法

Car myCar = new Car();
myCar.Make = "Toyota";
myCar.Year = 2020;
myCar.Start();
myCar.Stop();

創建於2020年的Toyota汽車已啟動!
汽車已停止!

封裝

將類別的內部狀態隱藏起來,只提供一個公開的介面來訪問物件。

三個定義類別成員(屬性和方法)的方式

  • public(公開)
    特點:公開成員是完全可訪問的,不受限制。它們可以在任何地方(包括其他類別)被訪問。
public class Car
{
    public string Make;
    public string Model;
    public int Year;
    public void Start()
    {
        Console.WriteLine("汽車已啟動!");
    }
}
namespace ithome_test
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Car myCar = new Car();
            myCar.Make = "Toyota";
            myCar.Model = "Camry";
            myCar.Year = 2020;
            myCar.Start();
        }
    }
}
  • private(私有):
    特點:私有成員只能在其定義的同一類別內訪問,對外部程式碼是隱藏的。這有助於實現封裝。
public class Car
{
    private string Make;
    private string Model;
    private int Year;
    public void Start()
    {
        Console.WriteLine("汽車已啟動!");
    }

    public void SetMake(string make)
    {
        Make = make;
    }

    public string GetMake()
    {
        return Make;
    }
}
namespace ithome_test
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Car myCar = new Car();

            // 這裡無法直接訪問 Make 屬性,因為它是 private 的
            // myCar.Make = "Toyota";  // 這會產生編譯錯誤

            // 但我們可以使用公開的 SetMake 和 GetMake 方法訪問 Make 屬性
            myCar.SetMake("Toyota");
            Console.WriteLine($"汽車製造商:{myCar.GetMake()}");

            myCar.Start();
        }
    }
}
  • protected(保護):
    特點:保護成員可以在其定義的類別內訪問,以及在派生(子)類別中訪問。它們是繼承的一部分。
using System;

// 類別
public class Vehicle
{
    protected string Make;
    protected string Model;

    public Vehicle(string make, string model)
    {
        Make = make;
        Model = model;
    }

    public void Start()
    {
        Console.WriteLine($"{Make} {Model} 已啟動!");
    }
}

public class Car : Vehicle
{
    public Car(string make, string model) : base(make, model)
    {
    }
}
namespace ithome_test
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Car myCar = new Car("Toyota", "Camry");
            myCar.Start();  // 可以訪問基類的 protected 屬性和方法
        }
    }
}

Toyota Camry 已啟動!

繼承

繼承是OOP的另一個重要概念,它允許一個類別(子類別)從另一個類別(父類別)繼承屬性和方法。

public class Car
{
    // 屬性
    public string Make;
    public string Model;
    public int Year;

    // 方法
    public void Start()
    {
        Console.WriteLine("汽車已啟動!");
    }

    public void Stop()
    {
        Console.WriteLine("汽車已停止!");
    }
}
public class ElectricCar : Car
{
    public int BatteryCapacity;

    public void Charge()
    {
        Console.WriteLine("電動汽車正在充電!");
    }
}

namespace ithome_test
{
    internal class Program
    {
        static void Main(string[] args)
        {
            ElectricCar myElectricCar = new ElectricCar();
            myElectricCar.Make = "Tesla";
            myElectricCar.Model = "Model S";
            myElectricCar.Year = 2022;
            myElectricCar.BatteryCapacity = 75;
            myElectricCar.Start();
            myElectricCar.Charge();
        }
    }
}

多態

多態性允許不同的類別實現相同的方法或介面,但可以以不同的方式實現。

using System;

// 建立一個基底類別 Animal
public class Animal
{
    public virtual void MakeSound()
    {
        Console.WriteLine("某種動物正在發出聲音");
    }
}

// 建立一個派生類別 Dog,繼承自 Animal
public class Dog : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("狗在汪汪叫!");
    }
}

// 建立一個派生類別 Cat,繼承自 Animal
public class Cat : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("貓在喵喵叫!");
    }
}

class Program
{
    static void Main(string[] args)
    {
        // 建立 Animal、Dog 和 Cat 物件
        Animal myAnimal = new Animal();
        Animal myDog = new Dog();
        Animal myCat = new Cat();

        // 呼叫 MakeSound 方法
        myAnimal.MakeSound();  // 某種動物正在發出聲音
        myDog.MakeSound();     // 狗在汪汪叫!
        myCat.MakeSound();     // 貓在喵喵叫!
    }
}

某種動物正在發出聲音
狗在汪汪叫!
貓在喵喵叫!

結尾

今天介紹了物件導向的實作,那就到這裡啦 ~ 掰掰 !

參考資料

https://learn.microsoft.com/zh-tw/dotnet/csharp/fundamentals/tutorials/oop


上一篇
2023-鐵人賽.NET雲端魔法尊者之路 Day8 C#篇 C# 物件導向
下一篇
2023-鐵人賽.NET雲端魔法尊者之路 Day10 .NET篇 強大的魔法
系列文
.NET雲端魔法尊者之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言